home *** CD-ROM | disk | FTP | other *** search
- #include "TrapHook.h"
- #include <Memory.h>
- #include <Menus.h>
- #include <strings.h>
- #include <OSUtils.h>
-
- #define DrawCharNum 0x083
-
- extern long InsertHookAddr;
-
- /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
-
- SetupHook(InfoFunc,HookFunc,TrapNum,HookAddr,NormalTrap)
- int (*InfoFunc)();
- long HookFunc;
- int TrapNum;
- TrapHookPointer *HookAddr;
- long *NormalTrap;
- {
- int ParamsSize;
- int CodeSize;
- long CodeAddr;
- THz OldZone;
-
- (*InfoFunc)(&CodeAddr,&CodeSize,&ParamsSize);
-
- /* MAKE SURE TRAP HOOK IS IN SYS HEAP... */
- OldZone = GetZone();
- SetZone (SystemZone());
- *HookAddr = (TrapHookPointer)NewPtr(ParamsSize + CodeSize);
- SetZone (OldZone);
-
- *NormalTrap = GetTrapAddress(TrapNum);
- (**HookAddr).FuncAddress = HookFunc;
- (**HookAddr).TrapAddress = *NormalTrap;
- (**HookAddr).HookCallLevel = 0;
- BlockMove((Ptr)CodeAddr,(Ptr)&((**HookAddr).Code),CodeSize);
-
- SetTrapAddress((long)&((**HookAddr).Code),TrapNum);
- }
-
- /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
-
- UnsetTrapHook(HookAddr)
- TrapHookPointer HookAddr;
- {
- int CodeSize;
- long CodeAddr;
-
- UnChainHook(&CodeAddr,&CodeSize);
-
- BlockMove((Ptr)CodeAddr,(Ptr)&(HookAddr->Code),CodeSize);
- }
-
- /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
-
-